﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionePolveriLib.BL;
using GestionePolveriLib.Facades;
using GestionePolveriLib.Facades.Extensions;

namespace GestionePolveriLib.Utilities
{
    public class FilterComboBoxHelper
    {
        public static void Reset(ComboBox control)
        {
            control.SelectedIndex = -1;
        }

        public static T GetSelectedItem<T>(ComboBox control)
        {
            T retValue = default(T);

            if ((control.SelectedItem != null) && (control.SelectedIndex != 0))
            {
                retValue = (T)control.SelectedItem;
            }
            
            return retValue;
        }

        public static void SetupPolveriComboBox(ComboBox control)
        {
            PolvereFacade pf = new PolvereFacade();
            List<Polvere> data = pf.GetPolveriForFilter();

            if (data != null)
            {
                data.Insert(0, new Polvere() { CodicePolvere = "Seleziona una polvere", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "codicepolvere";
                control.ValueMember = "id";
                control.DataSource = data;
            }
        }

        public static void SetupPolveriComboBoxAssociaPolvere(ComboBox control)
        {
            PolvereFacade pf = new PolvereFacade();
            List<PolvereExt> data = pf.GetPolveriForAssociaPolvere();

            if (data != null)
            {
                data.Insert(0, new PolvereExt() { CodicePolvere = "Seleziona una polvere", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "codicepolvere";
                control.ValueMember = "id";
                control.DataSource = data;
            }
        }

        public static void SetupPolveriComboBoxCS(ComboBox control)
        {
            PolvereFacade pf = new PolvereFacade();
            List<Polvere> data = pf.GetPolveriForCS();

            if (data != null)
            {
                data.Insert(0, new Polvere() { CodicePolvere = "Seleziona una polvere", ID = -1 });

                //control.Items.Clear();
                //control.DataSource = null;

                control.DisplayMember = "CodicePolvere";
                control.ValueMember = "ID";
                control.DataSource = data;
            }
        }

        public static void SetupPolveriComboBoxCSMinimal(ComboBox control)
        {
            PolvereFacade pf = new PolvereFacade();
            List<Polvere> data = pf.GetPolveriForCSMinimal();

            if (data != null)
            {
                data.Insert(0, new Polvere() { CodicePolvere = "Seleziona una polvere", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "CodicePolvere";
                control.ValueMember = "ID";
                control.DataSource = data;
            }
        }

        public static void SetupLottiComboBox(ComboBox control)
        {
            LottoFacade lf = new LottoFacade();
            List<Lotto> m_data = lf.GetLottiForFilter();
            
            if (m_data != null)
            {
                m_data.Insert(0, new Lotto() { CodLotto = "Selezionare un lotto", IDLotto = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "CodLotto";
                control.ValueMember = "IDLotto";
                control.DataSource = m_data;
            }
        }

        public static void SetupCausaliScaricoComboBox(ComboBox control)
        {
            CausaliScaricoFacade lf = new CausaliScaricoFacade();
            List<CausaleScarico> m_data = lf.GetAllI();

            if (m_data != null)
            {
                m_data.Insert(0, new CausaleScarico() { Descrizione = "Selezionare una causale", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "Descrizione";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupFornitoriComboBox(ComboBox control)
        {
            FornitoriFacade ff = new FornitoriFacade();
            List<Fornitore> m_data = ff.GetFornitoriForFilter();
            
            if (m_data != null)
            {
                m_data.Insert(0, new Fornitore() { Descrizione = "Seleziona un fornitore", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "Descrizione";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupColoriComboBox(ComboBox control)
        {
            ColoriFacade cf = new ColoriFacade();
            List<Colore> m_data = cf.GetColoriForFilter();

            if (m_data != null)
            {
                m_data.Insert(0, new Colore() { CodiceColore = "Seleziona un colore", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "CodiceColore";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupColoriComboBoxAssociaPolvere(ComboBox control)
        {
            ColoriFacade cf = new ColoriFacade();
            List<Colore> m_data = cf.GetColoriForAssociaPolvere();

            if (m_data != null)
            {
                m_data.Insert(0, new Colore() { CodiceColore = "Seleziona un colore", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "CodiceColore";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupFamigliaComboBox(ComboBox control)
        {
            FamigliaColoriFacade cf = new FamigliaColoriFacade();
            List<FamigliaColore> m_data = cf.GetAll();

            if (m_data != null)
            {
                m_data.Insert(0, new FamigliaColore() { Descrizione = "Seleziona una famiglia", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "Descrizione";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupImpiantiComboBox(ComboBox control)
        {
            ImpiantoFacade pf = new ImpiantoFacade();
            List<Impianto> m_data = pf.GetImpianti();

            if (m_data != null)
            {
                m_data.Insert(0, new Impianto() { Nome = "Seleziona un impianto", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "Nome";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupImpiantiFittiziComboBox(ComboBox control)
        {
            ImpiantoFacade pf = new ImpiantoFacade();
            List<Impianto> m_data = pf.GetImpianti(true);

            if (m_data != null)
            {
                m_data.Insert(0, new Impianto() { Nome = "Seleziona un impianto", ID = -1 });

                //control.DataSource = null;
                //control.Items.Clear();
                control.DisplayMember = "Nome";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        public static void SetupTurniComboBox(ComboBox control)
        {
            TurniFacade pf = new TurniFacade();
            List<Turno> m_data = pf.Get();

            if (m_data != null)
            {
                m_data.Insert(0, new Turno() { Descrizione = "Seleziona un turno", Id = -1 });

                control.DisplayMember = "Descrizione";
                control.ValueMember = "Id";
                control.DataSource = m_data;
            }
        }

        public static void SetupApplicazioneComboBox(ComboBox control)
        {
            control.DataSource = null;
            control.Items.Clear();
            control.Items.Add("Seleziona un tipo di applicazione");
            control.Items.Add("b");
            control.Items.Add("v");

            control.SelectedIndex = 0;
        }

        public static void SetupOperatoriComboBox(ComboBox control)
        {
            OperatoriFacade pf = new OperatoriFacade();
            List<Operatore> m_data = pf.GetOperatori();

            if (m_data != null)
            {
                m_data.Insert(0, new Operatore() { UserName = "Seleziona un operatore", ID = Guid.Empty });

                control.DisplayMember = "UserName";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }

        /// <summary>
        /// Elenco Tipologie Scorta Minima Polvere
        /// </summary>
        /// <param name="control"></param>
        public static void SetupTipologieSMPComboBox(ComboBox control)
        {
            TipologiaSMPFacade ff = new TipologiaSMPFacade();
            List<TipologiaScortaMinima> m_data = ff.Get();

            if (m_data != null)
            {
                m_data.Insert(0, new TipologiaScortaMinima() { Codice = "Seleziona...", ID = -1 });

                control.DisplayMember = "Codice";
                control.ValueMember = "ID";
                control.DataSource = m_data;
            }
        }
    }
}
